package cn.com.infcn.monitor.bean;

import java.util.ArrayList;
import java.util.List;

public class IFCResponseBeanMean {
	
	private String date;

	private IFCCpu cpu;
	private int cpuCount = 0;
	
	private IFCJVMOperatingSystem jvmOS;
	private int jvmOSCount = 0;
	
	private IFCMem mem;
	private int memCount;

	public void addIFCCpu(List<IFCCpu> ifcCpus) {
		if(ifcCpus!=null && ifcCpus.size()>0){
			for (IFCCpu ifcCpu : ifcCpus) {
				if (ifcCpu != null) {
					if (cpu == null) {
						cpu = new IFCCpu();
						cpu.setMhz(ifcCpu.getMhz()); // CPU的总量MHz
						cpu.setVendor(ifcCpu.getVendor()); // 获得CPU的卖主，如：Intel
						cpu.setModel(ifcCpu.getModel()); // 获得CPU的类别，如：Celeron
						cpu.setCacheSize(ifcCpu.getCacheSize()); // 缓冲存储器数量
						cpu.setTotalCores(ifcCpu.getTotalCores()); // CPU核数
						cpu.setTotalSockets(ifcCpu.getTotalSockets()); // sockets数
					}
					cpu.setUser(cpu.getUser() + ifcCpu.getUser()); // CPU用户使用率
					cpu.setSys(cpu.getSys() + ifcCpu.getSys()); // CPU系统使用率
					cpu.setWait(cpu.getWait() + ifcCpu.getWait()); // CPU当前等待率
					cpu.setNice(cpu.getNice() + ifcCpu.getNice()); // CPU当前错误率
					cpu.setIdle(cpu.getIdle() + ifcCpu.getIdle()); // CPU当前空闲率
					cpu.setCombined(cpu.getCombined() + ifcCpu.getCombined()); // CPU总的使用率
					cpu.setIrq(cpu.getIrq() + ifcCpu.getIrq()); // CPU硬件中断时间
					cpu.setSoftIrq(cpu.getSoftIrq() + ifcCpu.getSoftIrq()); // CPU软件中断时间
					cpu.setStolen(cpu.getStolen() + ifcCpu.getStolen()); // CPU使用内部虚拟机运行任务的时间

				}
			}
			cpuCount++;
		}
	}

	public IFCCpu getIFCCpu() {
		if (cpu != null) {
			cpu.setUser(cpu.getUser() / cpuCount);
			cpu.setSys(cpu.getSys() / cpuCount); // CPU系统使用率
			cpu.setWait(cpu.getWait() / cpuCount); // CPU当前等待率
			cpu.setNice(cpu.getNice() / cpuCount); // CPU当前错误率
			cpu.setIdle(cpu.getIdle() / cpuCount); // CPU当前空闲率
			cpu.setCombined(cpu.getCombined() / cpuCount); // CPU总的使用率
			cpu.setIrq(cpu.getIrq() / cpuCount); // CPU硬件中断时间
			cpu.setSoftIrq(cpu.getSoftIrq() / cpuCount); // CPU软件中断时间
			cpu.setStolen(cpu.getStolen() / cpuCount); // CPU使用内部虚拟机运行任务的时间
		}
		return cpu;
	}
	
	
	public void addIFCJVMOperatingSystemCount(IFCJVMOperatingSystem ifcJVMOS){
		if (ifcJVMOS != null) {
			if (jvmOS == null) {
				jvmOS = new IFCJVMOperatingSystem();
				jvmOS.setArch(ifcJVMOS.getArch());	// 返回操作系统的架构。
				jvmOS.setAvailableProcessors(ifcJVMOS.getAvailableProcessors());	// 返回 Java 虚拟机可以使用的处理器数目。
				jvmOS.setVersion(ifcJVMOS.getVersion());	// 返回操作系统的版本。
				jvmOS.setName(ifcJVMOS.getName());	// 返回操作系统名称。
			}
			jvmOS.setSystemLoadAverage(jvmOS.getSystemLoadAverage() + ifcJVMOS.getSystemLoadAverage());	// 返回最后一分钟内系统加载平均值。

			jvmOSCount++;
		}
	}

	public IFCJVMOperatingSystem getIFCJVMOperatingSystem() {
		if (jvmOS != null) {
			jvmOS.setSystemLoadAverage(jvmOS.getSystemLoadAverage() / jvmOSCount);
		}
		return jvmOS;
	}
	
	
	public void addIFCMemCount(IFCMem ifcMem){
		if (ifcMem != null) {
			if (mem == null) {
				mem = new IFCMem();
			}
			mem.setTotal(mem.getTotal()+ifcMem.getTotal());	// 内存总量
			mem.setRam(mem.getRam()+ifcMem.getRam());	//内存大小(MB)
			mem.setUsed(mem.getUsed()+ifcMem.getUsed());	// 当前内存使用量
			mem.setFree(mem.getFree()+ifcMem.getFree());	// 当前内存剩余量
			mem.setActualUsed(mem.getActualUsed()+ifcMem.getActualUsed());	//真实使用大小
			mem.setActualFree(mem.getActualFree()+ifcMem.getActualFree());	//真实空闲大小
			mem.setUsedPercent(mem.getUsedPercent()+ifcMem.getUsedPercent());	//使用百分比
			mem.setFreePercent(mem.getFreePercent()+ifcMem.getFreePercent());	//空闲百分比
			
			mem.setSwapTotal(mem.getSwapTotal()+ifcMem.getSwapTotal());	// 交换区总量
			mem.setSwapUsed(mem.getSwapUsed()+ifcMem.getSwapUsed());	// 当前交换区使用量
			mem.setSwapFree(mem.getSwapFree()+ifcMem.getSwapFree());	// 当前交换区剩余量
			mem.setSwapPageIn(mem.getSwapPageIn()+ifcMem.getSwapPageIn());//
			mem.setSwapPageOut(mem.getSwapPageOut()+ifcMem.getSwapPageOut());
			memCount++;
		}
	}

	public IFCMem getMem() {
		if (mem != null) {
			mem.setTotal(mem.getTotal()/memCount);	// 内存总量
			mem.setRam(mem.getRam()/memCount);	//内存大小(MB)
			mem.setUsed(mem.getUsed()/memCount);	// 当前内存使用量
			mem.setFree(mem.getFree()/memCount);	// 当前内存剩余量
			mem.setActualUsed(mem.getActualUsed()/memCount);	//真实使用大小
			mem.setActualFree(mem.getActualFree()/memCount);	//真实空闲大小
			mem.setUsedPercent(mem.getUsedPercent()/memCount);	//使用百分比
			mem.setFreePercent(mem.getFreePercent()/memCount);	//空闲百分比
			
			mem.setSwapTotal(mem.getSwapTotal()/memCount);	// 交换区总量
			mem.setSwapUsed(mem.getSwapUsed()/memCount);	// 当前交换区使用量
			mem.setSwapFree(mem.getSwapFree()/memCount);	// 当前交换区剩余量
			mem.setSwapPageIn(mem.getSwapPageIn()/memCount);//
			mem.setSwapPageOut(mem.getSwapPageOut()/memCount);
		}
		return mem;
	}

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}
	
	public IFCResponseBean getIFCResponseBean(){
		IFCResponseBean ifcResponseBean = new IFCResponseBean();
		ifcResponseBean.setDate(this.getDate());
		if(this.cpu != null){
			List<IFCCpu> ifcCpus = new ArrayList<IFCCpu>();
			ifcCpus.add(getIFCCpu());
			ifcResponseBean.setIfcCpus(ifcCpus);
		}
		if(this.mem != null){
			ifcResponseBean.setIfcMem(getMem());
		}
		if(this.jvmOS != null){
			ifcResponseBean.setIfcJVMOperatingSystem(getIFCJVMOperatingSystem());
		}
		return ifcResponseBean;
	}
}
